package com.monkey.algorithm.chapter2

/**
 * 作者：Monkey
 * 日期：2018/1/31
 */
object SelectionSort : BaseExample() {
    override fun <T> sort(arr: Array<Comparable<T>>) {
        val n = arr.size
        for (i in 0 until n) {
            // 最小值的索引
            var min = i

            // 从剩余未排序的元素中找到最小元素的索引
            (i until n)
                .asSequence()
                .filter { less(arr[it], arr[min]) }
                .forEach { min = it }

            // 交换i和min(即最小值索引)对应元素的位置
            // 这样每一轮都是最小值和当前i对应的元素位置互换
            println("$i 和 $min 交换")
            swap(arr, i, min)
        }
    }
}